package com.xhj.mybatis.scripting.xmltags;

import com.xhj.mybatis.session.Configuration;

import java.util.Arrays;
import java.util.List;

/**
 * WhereSqlNode
 *
 * @author XJks
 * @description WhereSqlNode 类用于在 SQL 语句中自动添加 WHERE 子句，并去除多余的 AND/OR 前缀。继承自 TrimSqlNode，主要用于 MyBatis 的动态 SQL 处理。
 */
public class WhereSqlNode extends TrimSqlNode {

    /**
     * 定义一个静态的前缀列表，包含各种可能出现在 SQL 语句开头的 AND/OR 关键字及其变体（带空格、换行、回车、制表符）。
     */
    private static List<String> prefixList = Arrays.asList(
            // 以空格结尾的 AND/OR
            "AND ", "OR ",
            // 以换行 \n 结尾的 AND/OR
            "AND\n", "OR\n",
            // 以回车 \r 结尾的 AND/OR
            "AND\r", "OR\r",
            // 以制表符 \t 结尾的 AND/OR
            "AND\t", "OR\t"
    );

    /**
     * 构造方法，接收 MyBatis 的配置对象和 SQL 节点内容。
     * 调用父类 TrimSqlNode 的构造方法，自动设置前缀为 "WHERE"，并传入前缀列表。
     * 这样可以在生成 SQL 时自动去除多余的 AND/OR，并添加 WHERE 子句。
     *
     * @param configuration MyBatis 的配置对象
     * @param contents      SQL 节点内容
     */
    public WhereSqlNode(Configuration configuration, SqlNode contents) {
        // 调用父类构造方法，设置 WHERE 前缀和前缀列表，后面三个参数为 null 表示不处理后缀和其他内容
        super(configuration, contents, "WHERE", prefixList, null, null);
    }

}

